热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linkerd|实现Kubernetes可观察性监测

在本文中,我们将向您展示如何完成基本的Kubernetes可观察性任务:从运行在Kubernetes集群上的应用程序获得黄金指标或黄金信号。我们不需要修改任何代码&#

在本文中,我们将向您展示如何完成基本的Kubernetes可观察性任务:从运行在Kubernetes集群上的应用程序获得黄金指标或黄金信号。我们不需要修改任何代码,也不需要进行任何配置,只要安装Linkerd(一个开源的超轻服务网格)就可以做到这一点。我们将介绍什么是服务网格,术语可观察性是什么意思,以及这两者在Kubernetes上下文中是如何关联的。

用服务网格监控Kubernetes应用程序

如果你们刚刚适应了Kubernetes。恭喜你!但是现在你需要干什么?任何Kubernetes使用者者的第一个可观察性任务之一是监视,您需要知道什么时候出现了问题,以便您可以快速地修复它们。

Kubernetes可观察性是一个非常广泛的话题,网上有很多关于可观察性与监控、分布式跟踪与日志记录等之间的细微差别的讨论。在本文中,我们将重点讨论一个基本问题:在不更改任何代码的情况下,从运行在集群上的应用程序获得黄金指标或黄金信号。我们将安装一个Linkerd,一个开源的超轻量级服务网格。与大多数服务网格不同,Linkerd只需要在集群上安装几分钟,不需要配置。

虽然简单,但Linkerd包含了一个非常强大的度量管道。一旦安装完毕,它将通过观察集群上运行的所有组件之间的HTTP(或gRPC)和TCP通信,自动检测并报告成功率、流量级别和响应延迟。

linkd可以自动为服务报告度量标准通常被引用为服务的黄金度量标准。

什么是黄金度量标准?为什么它们很重要?

如果您已经知道黄金参数是什么,请跳过这一节!

黄金指标或黄金信号是您需要了解应用程序是否按预期启动和运行的首要指标。这些度量为您提供了有关服务运行状况的粗略信号,而不需要知道服务的实际功能。

Cindy Sridharan在她的关于监控和可观察性的博文中写道:当不直接驱动报警时,监控数据应该被优化,以提供系统整体健康状况的鸟瞰图。

谷歌SRE书定义的黄金指标为:

  • 延迟——一种衡量服务速度快慢的方法。它是服务请求所花费的时间,通常以百分比来度量。第99百分位延迟为5ms意味着99%的请求在5ms或更短的时间内得到服务。

  • 流量——让你知道某项服务有多忙或需求有多复杂。通常用每秒对服务的请求数来衡量。

  • 错误-请求失败的数量。通常与总流量相结合来生成一个成功率——成功请求与遇到错误请求的比率。

  • 饱和-衡量你的系统的负载

通过观察服务的流量,Linkerd可以简单地提供延迟、流量和错误的测量——乐观地说,Linkerd以成功率的形式提供了这些数据。(第四个指标,饱和度,在监控讨论中经常被忽略,因为它需要了解服务的内部情况,通常跟踪其他指标,如流量和延迟。)

有时这些指标也被称为服务的RED指标:

  • Rate——您的服务每秒正在处理的请求数。

  • Errors—每秒失败的请求数。

  • Duration——每个请求所花费时间的分布

不管你怎么称呼它们,Linkerd的美妙之处在于,它不仅记录这些指标的流量,而且汇总和报告它们,这样我们就可以轻松地使用它们。(我们将在下面看到。)这使我们能够监控我们的应用程序。一旦我们能够监控我们的应用程序,我们就可以在出错时收到报警;研究其长期性能;并对其可靠性和性能进行测试和改进。

黄金指标:最简单的方法

安装:访问Kubernetes集群并安装Linkerd CLI

我们假设您有一个正常运行的Kubernetes集群和一个指向它的kubectl命令。在本节中,我们将带您浏览linkd入门指南的缩写版本,以便在这个集群上安装Linkerd和一个演示应用程序(我们将获得最佳指标的应用程序)。

首先,安装Linkerd命令行(或者,直接从Linkerd release页面下载。):

curl -sL https://run.linkerd.io/install | sh
export PATH=$PATH:$HOME/.linkerd2/bin

验证Kubernetes集群是否能够处理linkd;安装Linkerd;并验证安装:

linkerd check --pre
linkerd install | kubectl apply -f -
linkerd check

最后,安装Emojivoto演示应用程序,这是我们希望获得黄金指标的应用程序。如果仔细观察下面的命令,您将看到我们实际上是在向应用程序添加linkerd(我们称之为注入),然后将应用程序部署到Kubernetes。(如果您想知道这是如何工作的,请查看我们的文档https://linkerd.io/2/tasks/adding-your-service/)。

curl -sL https://run.linkerd.io/emojivoto.yml \
| linkerd inject - \
| kubectl apply -f -

嗯,就是这样。这就是您需要的所有工具,您的应用程序,并能够访问您的黄金指标!现在让我们来看看他们。

在Grafana查看度量

想要看到所有这些有用的图表和仪表板吗?没有问题!运行linkd dashboard -show grafana并打开命令输出的链接。您将看到Linkerd的顶层仪表盘,其中包含它所收集的指标的总体和每个名称空间的细分。向下滚动到我们应用程序的命名空间(ns/emojivoto),观察以下图表:

通过linkd CLI查看指标

我们还可以使用linkd stat命令查看应用程序的指标。

所有这些数据也可以在Linkerd's dashboard中找到,你可以通过运行Linkerd dashboard来访问:

看看Grafana图表(或linkd仪表盘),你可以立即看到voting服务做得不是很好-它的成功率相当低!向我们的应用程序中添加黄金指标可以立即让我们看到应用程序中可能出现的问题。

真的这么简单吗?答案是肯定的!我们所需要做的就是安装Linkerd并将其注入到我们的应用程序中。在底层,当linkd被添加到一个服务时,它会自动检测与服务的pod之间的任何HTTP和gRPC调用。由于它能够解析这些协议,它可以记录这些调用的响应类和延迟,并将它们聚合在一起,在这种情况下,将它们合并到一个名为Prometheus的时间序列数据库的小型内部实例中。当您通过Linkerd的仪表板和CLI查看黄金指标时,Linkerd会从这个内部的Prometheus实例中获取它们,在不修改应用程序代码的情况下为您提供所有这些指标。

Linkerd还能做什么?

我们已经看到了如何使用Linkerd来获得黄金指标,这是获得系统可观察性的第一步,也就是说,获得复杂应用程序中正在发生的事情的高级视图。但指标只是个开始。当您继续您的监视和可观察性旅程时,您一定会遇到另外两个常用的工具:日志和分布式链路跟踪。

分布式跟踪涉及到检测应用程序,以便测量请求在服务中花费的时间长度。当我们的应用程序使用许多相互通信的微服务时,跟踪是一个很好的工具,可以用来调试缓慢的请求,并找出哪个服务是瓶颈。Linkerd可以帮助分布式跟踪,尽管一个服务网格在分布式跟踪方面做的不多。

类似于分布式跟踪,Linkerd也提供了一个强大的动态请求跟踪工具tap。tap命令类似于用于微服务的tcpdump:它允许您查看发送到或来自特定服务的实时请求(示例)。Tap是在生产中调试Kubernetes服务的强大工具。

最后,应用程序日志当然是开发人员在怀疑某个特定进程不正常时首先要做的事情之一。当运行一个服务网格时,有时候查看网格内部发生了什么是很有用的。虽然Linkerd不能为你提供应用程序日志,但Linkerd logs命令提供了一种简单的方法,至少可以查看Linkerd内部发生了什么。

最后

在这篇博文中,我们讨论了如何轻松获得运行在Kubernetes集群上的应用程序和服务的最佳指标。这是你进行服务可观察之旅的第一步。希望这篇博文中的信息能够帮助您启动并可靠的运行Kubernetes服务。

推荐

Kubernetes入门培训(内含PPT)

使用Kubernetes和Istio构建大规模集群


推荐阅读
  • Istio是一个用来连接、管理和保护微服务的开放平台。Istio提供一种简单的方式来为已部署的服务建 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 在互联网公司中,MySQL是使用最多的数据库,那么在并发量大、数据量大的互联网业务中,如何高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 《Spring in Action 第4版:全面解析与实战指南》
    《Spring in Action 第4版:全面解析与实战指南》不仅详细介绍了Spring框架的核心优势,如简洁易测试、低耦合特性,还深入探讨了其轻量级和最小侵入性的设计原则。书中强调了声明式编程的优势,并通过基于约定的方法简化开发流程。此外,Spring的模板机制有效减少了重复代码,而依赖注入功能则由容器自动管理,确保了应用的灵活性和可维护性。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 在深入研究 React 项目的过程中,特别是在探索 react-router 源码时,我发现了其中蕴含的中间件概念。这激发了我对中间件的进一步思考与整理。本文将详细探讨 Redux 中间件的原理及其在实际项目中的应用,帮助读者更好地理解和使用这一强大工具。通过具体示例和代码解析,我们将揭示中间件如何提升应用的状态管理和异步操作处理能力。 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • docker+k8s+git+jenkins
    docker+k8s+git+jenkins,Go语言社区,Golang程序员人脉社 ... [详细]
  • k8shelm官网:https:helm.sh点击charts:https:artifacthub.iopackagessearch?sortrelevance&page11.1h ... [详细]
  • kubelet配置cni插件_Kubernetes新近kubectl及CNI漏洞修复,Rancher 2.2.1发布
    今天,Kubernetes发布了一系列补丁版本,修复新近发现的两个安全漏洞CVE-2019-1002101(kubectlcp命令安全漏洞)和CVE-2 ... [详细]
  • 今天在node节点发现不能查看pod了输入命令错误如下[rootnode01~]#kubectlgetpodTheconnectiontotheserverlocalhost:8 ... [详细]
  • 虚拟机CentOS7挂载文件系统失败上周五下班前没有关闭虚拟机和物理机,今天周一开了虚拟机之后,发现操作系统启动失败。原因跟这篇文章描述的一模一样。解决操作系统的文件系统挂载的问题 ... [详细]
  • minikube安装过程介绍minikubeMinikube是一个可以在本地轻松运行Kubernetes的工具。Minikube会在您的笔记本电脑中的虚拟机上运行一个单节点的Kub ... [详细]
author-avatar
立行谏圣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有